package com.thread.threadfirst.studyThread4;

import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 10、第四种线程池：ScheduledThreadPool（定时线程池）
 * 可以替换Timer，与Timer不同的是：此线程池中的线程可复用 即第一个线程空闲了 可以再次执行任务，而Timer是每次都会启动一个新线程。
 */
public class T_ThreadPool4 {
    public static void main(String[] args) {
        ScheduledExecutorService service = Executors.newScheduledThreadPool(4);

        service.scheduleAtFixedRate(() -> {  //scheduleAtFixedRate：以固定的频率执行任务。有4个参数，第2个参数initialDelay：第一个任务执行前延长的时间。
            // 第3个参数period：每隔多长时间执行一次任务。第4个参数TimeUnit：时间单位。
            try {
                TimeUnit.MILLISECONDS.sleep(new Random().nextInt(1000));  //这里是随机1000毫秒，下面是每隔500毫秒，等500毫秒到了就启动第2个线程呗，要是500毫秒到了 而所有的线程都没有空闲 那就延迟。
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName());
        }, 0, 500, TimeUnit.MILLISECONDS);  //initialDelay=0，不延迟 马上执行第1个任务。
    }
}
